#ifndef PATTERNMOVEMENT_H
#define PATTERNMOVEMENT_H

#include "Vector3D.h"

//Governs the information regarding the movement of the agent
struct ControlData
{ 
	//Holds the position which the agent will travel to
	Vector3D point;

	//Controls the orientation of the agent
	float orientation;
};

//Governs the changing state of the pattern
struct StateChangeData
{
	//Holds the previous location of the pattern
	Vector3D previousPoint;

	//Holds the previous orientation for the pattern
	float previousOrientation;

	//Holds the information for the current orientation
	float currentOrientation;

	//Holds the information for the current point to proceed to
	Vector3D currentPoint;
};

class PatternMovement
{
	public:
		//Constructor : Initialize the class members
		PatternMovement();

		//Destructor : Deallocate any dynamic memory
		~PatternMovement();

		//Initialize the Pattern Tracking
		void initPattern();

		//Normalize the pattern
		void NormalizePattern();

		//Creates and Updates the movement in a Square pattern
		void createSquarePattern();

		//Creates and Updates the movement in a Zig Zag pattern
		void createZigZagPattern();

		//Creates and Updates the movement in a Hourglass pattern
		void createHourglassPattern();

		//Updates the pattern selected
		void updatePattern();

	private:
		static const int SQUARE_PATTERN		= 4;
		static const int ZIG_ZAG_PATTERN	= 8;
		static const int HOURGLASS_PATTERN	= 9;
};
#endif